# xfreerdp completion                                      -*- shell-script -*-

_xfreerdp()
{
    local cur prev words cword
    _init_completion -n : || return

    case $prev in
        -k)
            COMPREPLY=($(compgen -W '$("$1" --kbd-list |
                awk "/^0x/ { print \$1 }")' -- "$cur"))
            return
            ;;
        -a)
            COMPREPLY=($(compgen -W '8 15 16 24 32' -- "$cur"))
            return
            ;;
        -x)
            COMPREPLY=($(compgen -W 'broadband modem lan' -- "$cur"))
            return
            ;;
        --plugin)
            COMPREPLY=($(compgen -W 'cliprdr rdpsnd rdpdr' -- "$cur"))
            return
            ;;
        /help | /version | -h | --help | --version)
            return
            ;;
    esac

    case $cur in
        /kbd:*)
            COMPREPLY=($(compgen -W '$("$1" /kbd-list |
                awk "/^0x/ { print \$1 }")' -- "${cur#/kbd:}"))
            return
            ;;
        /bpp:*)
            COMPREPLY=($(compgen -W '8 15 16 24 32' -- "${cur#/bpp:}"))
            return
            ;;
        /*:*)
            return
            ;;
    esac

    if [[ $cur == /* ]]; then
        _filedir rdp
        COMPREPLY+=($(compgen -W '$("$1" --help |
            awk "\$1 ~ /^\\// && \$1 !~ /^.(flag\$|option:)/ { sub(\":.*\",\":\",\$1); print \$1 }")' \
            -- "$cur"))
        [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
    elif [[ $cur == [+-]* ]]; then
        local char=${cur:0:1}
        local help="$($1 --help)"
        if [[ $help == */help* ]]; then # new/slash syntax
            COMPREPLY=($(compgen -W '$(awk "
                \$1 ~ /^[+-]/ && \$1 !~ /^.toggle\$/ { sub(\"^.\",\"$char\",\$1); print \$1 }
            " <<<"$help")' -- "$cur"))
        else # old/dash syntax
            COMPREPLY=($(_parse_help - <<<"$help"))
            ((${#COMPREPLY[@]})) &&
                COMPREPLY=($(compgen -W '"${COMPREPLY[@]%:}"' -- "$cur"))
        fi
    else
        _filedir rdp
        COMPREPLY+=($(compgen -W "$(awk '{print $1}' ~/.freerdp/known_hosts \
            2>/dev/null)" -- "$cur"))
    fi

} &&
    complete -F _xfreerdp xfreerdp

# ex: filetype=sh
